%% main.tex --- файл-обертка для диплома

\documentclass[russian,utf8,simple,floatsection,equationsection]{eskdtext} 

\include{defs}  % вставляем содержимое служебных инструкций из defs.tex
\ESKDcolumnII{\small{Разработка ПО <<\name>>}}

\setcounter{section}{2}

\begin{document}
\section{Разработка ПО <<\name>>.}
\subsection{Процесс и методология разработки ПО}
Разработка программного обеспечения (англ. software engineering,
software development) — это род деятельности (профессия) и процесс,
направленный на создание и поддержание работоспособности программного
обеспечения, используя технологии и практики из информатики,
управления проектами, математики, инженерии и других областей
знания. Как и другие, традиционные инженерные дисциплины, разработка
программного обеспечения имеет дело с проблемами стоимости и
надёжности. Некоторые программы содержат миллионы строк исходного
кода, которые, как ожидается, должны правильно исполняться в
изменяющихся условиях. Сложность ПО сравнима со сложностью наиболее
сложных из современных машин. (Боинг 777-200 насчитывает примерно
132,5 тыс. уникальных деталей. Если учесть каждую заклёпку и каждый
винт, можно говорить о более чем 3 млн. деталей \red{[3]}.) 

На протяжении нескольких десятилетий стоит задача поиска повторяемого,
предсказуемого процесса или методологии, которая бы улучшила
продуктивность и качество разработки. Одни пытались систематизировать
и формализовать этот, по-видимому, непредсказуемый процесс. Другие
применяли к нему методы управления проектами. Без четкого управления,
разработка ПО выходит из-под контроля, съедая лишнее время и
средства.

Процесс разработки программного обеспечения (англ. software
development process, software process) — структура, согласно которой
построена разработка программного обеспечения (ПО).

Модель водопада (англ. waterfall model) - модель процесса разработки
программного обеспечения, в которой процесс разработки выглядит как
поток, последовательно проходящий фазы анализа требований,
проектирования, реализации, тестирования, интеграции и поддержки. В
качестве источника названия <<водопад>> часто указывают статью,
опубликованною У.У.Ройсом (W. W. Royce) в 1970 году; забавно, что сам
Ройс использовал итеративную модель разработки и даже не использовал
термин <<водопад>>\red{[2]}. 

\subsection{Структурные и функциональные модели}
\subsubsection{Анализ информационных потоков для разработки ПО}

Функциональная модель представляет собой набор диаграмм потоков данных
(далее - ДПД), которые описывают смысл операций и ограничений. ДПД
отражает функциональные зависимости значений, вычисляемых в системе,
включая входные значения, выходные значения и внутренние хранилища
данных. ДПД - это граф, на котором показано движение значений данных
от их источников через преобразующие их процессы к их потребителям в
других объектах.

ДПД содержит процессы, которые преобразуют данные, потоки данных,
которые переносят данные, активные объекты, которые производят и
потребляют данные, и хранилища данных, которые пассивно хранят данные.

Процесс преобразует значения данных. Процессы самого нижнего уровня
представляют собой функции без побочных эффектов (примерами таких
функций являются вычисление суммы двух чисел, вычисление комиссионного
сбора за выполнение проводки с помощью банковской карточки и
т.п.). Весь граф потока данных тоже представляет собой процесс
(высокого уровня). Процесс может иметь побочные эффекты, если он
содержит нефункциональные компоненты, такие как хранилища данных или
внешние объекты.

Поток данных соединяет выход объекта (или процесса) со входом другого
объекта (или процесса). Он представляет промежуточные данные
вычислений. Поток данных изображается в виде стрелки между
производителем и потребителем данных, помеченной именами
соответствующих данных; примеры стрелок, изображающих потоки
данных.

Активным называется объект, который обеспечивает движение данных,
поставляя или потребляя их. Активные объекты обычно бывают
присоединены к входам и выходам ДПД. На ДПД активные объекты
обозначаются прямоугольниками.

Хранилище данных - это пассивный объект в составе ДПД, в котором
данные сохраняются для последующего доступа. Хранилище данных
допускает доступ к хранимым в нем данным в порядке, отличном от того,
в котором они были туда помещены. Агрегатные хранилища данных, как
например, списки и таблицы, обеспечивают доступ к данным в порядке их
поступления, либо по ключам


ДПД показывает все пути вычисления значений, но не показывает в каком
порядке значения вычисляются. Решения о порядке вычислений связаны с
управлением программой, которое отражается в динамической модели. Эти
решения, вырабатываемые специальными функциями, или предикатами,
определяют, будет ли выполнен тот или иной процесс, но при этом не
передают процессу никаких данных, так что их включение в
функциональную модель необязательно. Тем не менее иногда бывает
полезно включать указанные предикаты в функциональную модель, чтобы в
ней были отражены условия выполнения соответствующего процесса. 

Рассмотрим подробнее этап проектирования программы. Для этого опишем
общую структуру системы, представленную на рисунке~\ref{dataFlow1}.

Рассмотрим данную контекстную диаграмму. В качестве процесса выступает
программно информационный комплекс; внешними объектами является
<<обычный пользователь>>, <<администратор>> и <<преподаватель>>.

\begin{figure}[!h]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow1}
  \caption{Общая структура системы.}
  \label{dataFlow1}
\end{figure}

Из этой диаграммы можно сделать вывод, что только <<администратор>> и
<<преподаватель>> имеют право вносить данные, остальные же
пользователи имеют доступ только на чтение. 

В данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Данные - укрупненная схема будет показана в дальнейшем;
\item настройки;
\end{itemize}

Укрупненная схема потоков данных представленная на
рисунке~\ref{dataFlow2}.

\begin{figure}[!h]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow2}
  \caption{Укрупненная структура системы.}
  \label{dataFlow2}
\end{figure}

<<Работа с пользователями>> осуществляет контроль над доступом
пользователей к тем или иным частям базы данных.

<<Методические пособия>> осуществляет обработку данных, связанных с
методическими пособиями. Для хранения пособий используется
Wiki-подобный язык.

<<Экзаменационные билеты>> для обычного пользователя выдает список
экзаменационных вопросов. Для преподавателя формирует готовые
экзаменационные билеты.

В данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Вопросы;
\item Билеты;
\item методические пособия. Как в виде html страниц, так и в виде
  сгенерированного pdf-файла;
\item Данные о пользователях.
\end{itemize}
Диаграмма потоков данных, показывающая структуру системы во время
работы администратора показана на рисунке~\ref{dataFlow3}.

\begin{figure}
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow3}
  \caption{Потоки манипулирования пользователями.}
  \label{dataFlow3}
\end{figure}

В данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Добавление;
\item Удаление;
\item Запрет на изменение.
\end{itemize}

Как видно из диаграммы, администратор может добавлять пользователей,
удалять их, а также менять право на запись. Последнее означает, что
пользователь может лишаться права на изменения тех или иных документов,
хранящихся в базе.

\subsubsection{Структура программного комплекса}
Общая схема разрабатываемого программного обеспечения представленная на
рисунке~\ref{system_struct}.

\begin{figure}[!ht]
  \centering
  \includegraphics[angle=0, width=\textwidth]{system_struct}
  \caption{Общая структура системы.}
  \label{system_struct}
\end{figure}

Рассмотрим каждую из подсистем подробнее:

\begin{description}
\item[Пользователь] - В данном случае это не под система. Так на
  диаграмме представленная схема работы с пользователем программы.
\item[Интерфейс программы]  - Данная подсистема отвечает за отрисовку
  интерфейса пользователя.
\item[Работа с привилегиями]  - проверка на право читать,
  редактировать информацию.
\item[Генератор вопросов] - генерация списка билетов по имеющимся в
  базе вопросам.
\item[Взаимодействие с БД] - передачи данных из/в БД.
\end{description}

\end{document}
